/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) 李文友 2017.5.8 类的具体实现代码编写

 版本说明
 V1.11 hualei　2018.10.29 深圳动劲测试用。
 V1.12 hualei  2018.11.2　东莞宏友测试
 V1.13 hualei 2018.11.8　深圳橙子测试用。
 V1.14 hualei 2018.11.10 深圳欧凯测试用。
 V1.15 hualei 2018.11.27 东莞华盛控测试。
 V1.23 hualei 2019.3.29 福德要求修改手动加速度。
 ***************************************************************************/

#ifdef D_USE_UI
#include <QApplication>
#include "mainwindow.h"
#include "testform.h"

#else
#include <QCoreApplication>
#endif
#include <QTextCodec>
#include <QSharedMemory>
#include <QDebug>
#include <stdlib.h>
#include "domparser.h"
#include "timetool.h"
#include "messagelog.h"
#ifdef D_USE_UI
#include "vreptest.h"
#else
#include "vrepobject.h"
#include "vrepcontrol.h"
#endif
#include "robotcontrol.h"
#include "powermanagerNew.h"

PowerManager* p_powerManger=NULL;

RobotControl* robCtl=NULL;//heap kongjian problem?

int main(int argc, char *argv[])
{
#ifdef D_USE_UI
    QApplication a(argc, argv);
#else
    QCoreApplication a(argc, argv);
#endif

    robCtl=new RobotControl;

    p_powerManger = new PowerManager;


    //设置优先级
    struct sched_param param;
    param.__sched_priority = 30;
    sched_setscheduler(0,SCHED_RR,&param);
//    int policy, priority;
//    pthread_getschedparam(pthread_self(), &policy, (struct sched_param *)&priority);
//    if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1)
//    {
//        qDebug("main thread mlockall failed");
//    }

    //设置ＱＴ字体
    #if QT_VERSION < QT_VERSION_CHECK(5,0,0)
        QTextCodec *codec = QTextCodec::codecForName( "UTF-8" );
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForTr(codec);
    #else
        QTextCodec *codec = QTextCodec::codecForName( "UTF-8" );
        QTextCodec::setCodecForLocale(codec);
    #endif


    //初始化TimeTool，MessageLog实例
    TimeTool::getInstance();
    MessageLog::getInstance();

    //初始化EcatMaster
    robCtl->init();


    //5)初始化算法轴模式
    robCtl->initialMotorControlMode();


    //主窗口
    MainWindow *mainWindow=new MainWindow();
    mainWindow->setMainVersion("version demoV2","date20191212");


    //ＩＯ及电机调试窗口
    testForm* ecatForm;
    ecatForm= new testForm();


    //VREP调试窗口
    VrepTest* vrepForm;
    vrepForm= new VrepTest();
    vrepForm->vrepControl=robCtl->vrepCtl;

    mainWindow->ecatForm=ecatForm;
//    mainWindow.motionForm=motionForm;
    mainWindow->vrepForm=vrepForm;
    mainWindow->setGeometry(70,0,871,717);
    mainWindow->show();
    //显示
    mainWindow->vrepForm->setGeometry(1500,500,300,500);
//    vrepForm->show();
//    mainWindow.ecatForm->setGeometry(700,30,300,300);
//    ecatForm->show();
//    mainWindow.motionForm->setGeometry(1000,40,500,700);

    mainWindow->showMotionForm();


    //程序退出处理

    a.exec();//core dump
//    webobj.closed();
//    webctl.closed();
//    sh.detach();
    robCtl->stop();
    qDebug()<<"Main thread exit, 程序退出 0！";
    return 0;
}


